package com.knowledgegraph.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.knowledgegraph.entity.Relation;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * 关系服务接口
 */
public interface RelationService extends IService<Relation> {

    /**
     * 创建关系
     * 
     * @param relation 关系信息
     * @param creatorId 创建者ID
     * @return 是否成功
     */
    boolean createRelation(Relation relation, Long creatorId);

    /**
     * 更新关系
     * 
     * @param relation 关系信息
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean updateRelation(Relation relation, Long userId);

    /**
     * 删除关系
     * 
     * @param relationId 关系ID
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean deleteRelation(Long relationId, Long userId);

    /**
     * 批量删除关系
     * 
     * @param relationIds 关系ID列表
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean batchDeleteRelations(List<Long> relationIds, Long userId);

    /**
     * 分页查询关系
     * 
     * @param page 分页参数
     * @param queryParams 查询参数
     * @return 分页结果
     */
    IPage<Relation> getRelationsWithPagination(Page<Relation> page, Map<String, Object> queryParams);

    /**
     * 获取实体的关系
     * 
     * @param entityId 实体ID
     * @return 关系列表
     */
    List<Relation> getRelationsByEntityId(Long entityId);

    /**
     * 获取统计数据
     * 
     * @return 统计数据
     */
    Map<String, Object> getGlobalStatistics();

    /**
     * 获取用户统计数据
     * 
     * @param userId 用户ID
     * @return 统计数据
     */
    Map<String, Object> getUserStatistics(Long userId);

    /**
     * 从文件导入关系
     * 
     * @param file 文件
     * @param userId 用户ID
     * @return 导入结果
     * @throws IOException IO异常
     */
    Map<String, Object> importRelationsFromFile(MultipartFile file, Long userId) throws IOException;

    /**
     * 导出关系到Excel
     * 
     * @param exportParams 导出参数
     * @param response HTTP响应
     * @throws IOException IO异常
     */
    void exportRelationsToExcel(Map<String, Object> exportParams, HttpServletResponse response) throws IOException;
}